package com.zb.store.service;

import com.zb.entity.AccounLoginInfo;
import com.zb.entity.ZjStoreOutboundOrderSpare;
import com.zb.vo.*;

import java.util.List;
import java.util.Map;

/**
 * @Author WEN
 * @Date 2024/1/8 0008
 **/
public interface ConStoreOutboundService {
    /**
     * 保存或审核出库单
     * @param loginInfo 登录信息
     * @param submitType 提交类型：1-保存，2-审核
     * @param outboundVo
     */
    void saveOrCheck(AccounLoginInfo loginInfo, String submitType, ZjStoreOutboundOrderSpare outboundOrderSpare, StoreOutboundVo outboundVo);

    /**
     * 获取出库列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> getList(Long custAccId, StoreOutboundListSelectVo selectVo);

    /**
     * 根据出库单ID获取出库详情
     * @param id
     * @return
     */
    OutboundDetailVo getOutboundDetail(Long id);

    /**
     * 根据出库单ID获取出库物料
     * @param id
     * @return
     */
    List<OutInboundMaterialVo> getOutboundMaterial(Long id);

    /**
     * 确认出库
     * @param loginInfo 登录信息
     * @param id 出库ID
     * @param sendVo 发货人及物流信息
     */
    void saveSureOutbound(AccounLoginInfo loginInfo, Long id, StoreOutboundSendVo sendVo);

    /**
     * 作废出库单
     * @param loginInfo 登录信息
     * @param id 出库单ID
     * @param remark 备注
     */
    void cancelOutbound(AccounLoginInfo loginInfo, Long id, String remark);

    /**
     * 驳回出库单
     * @param loginInfo
     * @param id
     * @param remark
     */
    void rejectOutbound(AccounLoginInfo loginInfo, Long id, String remark);

    /**
     * 工程师、服务商物料出入库操作
     * @param custAccId 商家ID
     * @param outStore 是否出库：false-入库，true-出库
     * @param storeOutServiceGoodsVos
     */
    void storeOutServiceGoods(Long custAccId, boolean outStore, List<StoreOutServiceGoodsVo> storeOutServiceGoodsVos);
}
